import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86185
 * Date: 2023-07-17
 * Time: 16:01
 */
public class JDBCdemo1 {
    public static void main(String[] args) throws SQLException {
        //让用户通过控制台输入信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();
        //1. 创建一个数据源
        DataSource dataSource = new MysqlDataSource();//向上转型
        //DataSource jdbc的interface, MysqlDataSource MySQL驱动包中的类 实现了DataSource interface
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&useSSL=false");//向下转型, 目的是为了使用setUrl方法, 这个方法只有子类才有
        //jdbc:mysql:   ->   url 是一个什么类型/用途的url  jdbc的mysql使用的
        //127.0.0.1     ->   ip地址 网络上一个设备的地址  这串数字通常是4个部分, 每个部分取值范围0~255, 4各部分使用.分割, 称为点分十进制.
        //                   127.0.0.1是一个特殊的IP地址, 特指自己的主机 环回IP
        //3306          ->   端口号, 用来区分主机上的应用程序(进程)
        //java108       ->   数据库名
        //characterEncoding  ->  字符集
        //useSSL=false  ->   数据库服务器和客户端之间的通信要不要加密  false:不加密  true:加密  不写默认是加密的

        ((MysqlDataSource) dataSource).setUser("root");//都是root
        ((MysqlDataSource) dataSource).setPassword("111111");//数据库的密码

        //2. 和数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        //3. 构造sql语句
//        String sql = "insert into student values(1, '张三')";
        String sql = "insert into student values(?, ?)";
        // ? 是占位符, 占据一个位置, 后续PreparedStatement会把变量的数值带入到 ? 中2
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

        //4. 执行sql语句, 返回的是这次操作影响了几行
        int n = statement.executeUpdate();
        System.out.println(n);

        //5. 释放必要的资源, 关闭连接
        //注意关闭顺序: 后创建的先关闭, 先创建的后关闭
        statement.close();
        connection.close();

    }
}
